/*
 * Segue Audio Player
 * Copyright 2011 Fraser McCrossan frasermccrossan@gmail.com
 * 
 * This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published
 *  by the Free Software Foundation, either version 3 of the License,
 *  or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.

 */

package com.frasermccrossan.segue;

import android.content.Context;
import android.content.Intent;

// a singleton class that manages access to the service
public class ServiceManager {

	private static ServiceManager instance = null;
	private Context c;
	private QueuePlayer mQueuePlayer = null;
	boolean mIsBound = false;
	int bind_count = 0;
		
	public static ServiceManager getInstance(Context context) {
		if (instance == null) {
			instance = new ServiceManager(context);
		}
		return instance;
	}

	// protected to avoid accidental instantiation
	protected ServiceManager(Context context) {
		// when first created we start the service
		c = context;
		doStartService();
		doBindService();
	}
	
	public void stopService() {
		doUnbindService();
		doStopService();
	}
	
	public QueuePlayer bind() {
		if (mIsBound && mQueuePlayer != null) {
			++bind_count;
			return mQueuePlayer;
		}
		else {
			return null;
		}
	}
	
	public void unbind() {
		--bind_count;
	}
	
	private void doStartService() {
        c.startService(new Intent(c, QueuePlayer.class));
	}

	private void doStopService() {
		c.stopService(new Intent(c, QueuePlayer.class));
	}

	private void doBindService() {
        //mIsBound = c.bindService(new Intent(c, QueuePlayer.class), mConnection, Context.BIND_AUTO_CREATE);
    }

    private void doUnbindService() {
        if (mIsBound) {
            // Detach our existing connection.
            //c.unbindService(mConnection);
            mIsBound = false;
        }
    }
}